//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//

// This file allows customization of the test strongname key used in place of the real MS key

#ifdef FEATURE_STRONGNAME_TESTKEY_ALLOWED

//
// #TestKeyStamping
// 
// On CoreCLR, we have a requirement that only keys signed with the Microsoft public key can be considered
// part of the platform and therefore contain critical code.  This leads to an issue with testing the
// product, since any tests which need to test platform only feautres would need to be signed  by the
// Microsoft public key, and for a variety of reasons it is not feasable to sign all of our test assemblies
// with that key.
// 
// Instead, we provide an extension where any assembly signed with the public key contained in the
// g_rbTestKeyBuffer will also be considered part of the platform.  The buffer is filled with a zero key,
// which means by default non-Microsoft signatures will not be accepted.  However, the slstampkey tool looks
// for the two GUIDs in the beginning of the buffer, and can replace the key with a real one of the test
// team's choosing.  Once this modification is in place, test assemblies can be considered part of the
// platform and can access critical APIs.
// 
// Since this buffer is searched for in the VM using external tools, it's very important that it only appear
// once in the final image of the runtime.  If it appears multiple times, tools will be unable to determine
// which test key buffer is the real buffer, and therefore tests which rely on containing platform code will
// be unable to run on the build.
// 

#define TEST_KEY_HEADER \
    /* Test key buffer header 1: { cd517db8-a1b1-44bf-aa64-bf66fefa3831 } */ \
    0xb8, 0x7d, 0x51, 0xcd, 0xb1, 0xa1, 0xbf, 0x44, 0x64, 0xaa, 0xbf, 0x66, 0xfe, 0xfa, 0x38, 0x31, \
    \
    /* Test key buffer header 2: { 5f363032-eaaf-4103-b312-ab2c8e35cf58 } */ \
    0x32, 0x30, 0x36, 0x5f, 0xaf, 0xea, 0x03, 0x41, 0x12, 0xb3, 0xab, 0x2c, 0x8e, 0x35, 0xcf, 0x58,

        
#define TEST_KEY_VALUE \
    /* SigAlgId = */\
    0x00, 0x24, 0x00, 0x00, \
    \
    /* HashAlgId = */\
    0x04, 0x80, 0x00, 0x00, \
    \
    /* cbPublicKey = 0x94 */ \
    0x94, 0x00, 0x00, 0x00, \
     \
    /* 1024 bit public key */ \
    0x06, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x52, 0x53, 0x41, 0x31, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, \
    0x0f, 0xc5, 0x99, 0x3e, 0x0f, 0x51, 0x1a, 0xd5, 0xe1, 0x6e, 0x8b, 0x22, 0x65, 0x53, 0x49, 0x3e, 0x09, 0x06, 0x7a, 0xfc, \
    0x41, 0x03, 0x9f, 0x70, 0xda, 0xeb, 0x94, 0xa9, 0x68, 0xd6, 0x64, 0xf4, 0x0e, 0x69, 0xa4, 0x6b, 0x61, 0x7d, 0x15, 0xd3, \
    0xd5, 0x32, 0x8b, 0xe7, 0xdb, 0xed, 0xd0, 0x59, 0xeb, 0x98, 0x49, 0x5a, 0x3b, 0x03, 0xcb, 0x4e, 0xa4, 0xba, 0x12, 0x74, \
    0x44, 0x67, 0x1c, 0x3c, 0x84, 0xcb, 0xc1, 0xfd, 0xc3, 0x93, 0xd7, 0xe1, 0x0b, 0x5e, 0xe3, 0xf3, 0x1f, 0x5a, 0x29, 0xf0, \
    0x05, 0xe5, 0xee, 0xd7, 0xe3, 0xc9, 0xc8, 0xaf, 0x74, 0xf4, 0x13, 0xf0, 0x00, 0x4f, 0x0c, 0x2c, 0xab, 0xb2, 0x2f, 0x9d, \
    0xd4, 0xf7, 0x5a, 0x6f, 0x59, 0x97, 0x84, 0xe1, 0xba, 0xb7, 0x09, 0x85, 0xef, 0x81, 0x74, 0xca, 0x6c, 0x68, 0x42, 0x78, \
    0xbe, 0x82, 0xce, 0x05, 0x5a, 0x03, 0xeb, 0xaf

    //
    // Test Public key blob
    //

    //
    // No prestamped test key - create an empty key buffer
    //
#define TEST_KEY_BUFFER \
    /* SigAlgId */ \
    0x00, 0x00, 0x00, 0x00, \
    \
    /* HashAlgId */ \
    0x00, 0x00, 0x00, 0x00, \
    \
    /* cbPublicKey = 0x94 - this needs to match the size of the public key section below */ \
    0x94, 0x00, 0x00, 0x00, \
    \
    /* 1024 bit public key - 0x94 bytes */ \
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

#endif // FEATURE_STRONGNAME_TESTKEY_ALLOWED
